Azure Application Gateway で WAF ログの機密データをマスク出来るようになっていたので試してみた
いわさです。
Azure の L7 ロードバランサーである「Azure Application Gateway」ではオプションで WAF を構成することが出来ます。
この WAF のルールに一致した場合にログを出力することが出来るのですが、WAF ログはプレーンテキストとして保存されるので、リクエスト上の IP アドレス やシークレット、あるいは個人情報などの機密データが含まれる場合があります。
先日のアップデートでこの WAF ログ上の機密データをマスキング出来るようになりました。
Azure Application Gateway で WAF のカスタムルールを運用している環境を持っていたので、この機能を適用するために使い方などを、まずは実際に検証してみることにしました。
Application Gateway を作成
バックエンドは Webhook.site を利用させて頂きました。
検証 API が必要な時はとても便利です。
このあたりの手順は割愛しますが、Azure Application Gateway リソースを作成し、バックエンドリソースとして Webhook.site を指定します。
Application Gateway までは HTTP、Application Gateway でプロキシした後は HTTPS 通信を行います。
Application Gateway の分析情報機能から確認するとこんな感じです。
シンプルすぎてあまり意味ないですが、複雑な API ゲートウェイ構成を取っている場合は構成を簡単に可視化できそうで便利ですねこの機能。
リクエストを送信してみます。
# 直接 webhook.site へリクエスト送信
% curl https://webhook.site/908c62d3-fc01-4e18-85c7-6a7bff062579
{"hoge":"defaultcontent"}
# Application Gateway 経由でリクエスト送信
% curl http://52.185.186.133/908c62d3-fc01-4e18-85c7-6a7bff062579
{"hoge":"defaultcontent"}
Webhook.site のコンソール画面でリクエスト内容を確認することが出来ます。
Application Gatewya を経由した場合はいくつかカスタムヘッダーが追加されていますね。
WAF とログの有効化
で、デフォルトでは WAF もログ出力も有効化されていないので、まずそのあたりを有効化していきたいと思います。
Starndard から WAF プランに変更します。
Application Gatewya は SKU ごとに料金が設定されており、WAF が使えるタイプのものは一番お高いものとなっています。
作成された WAF ポリシーに対して、次のように指定したカスタムヘッダーに対して特定の値が設定されていない場合、というルールを設定しました。
さらに、Application Gateway の診断設定から、ログを Log Analytics へ出力出来るようにします。
このあたりまで対応すると Log Analytics から WAF のログをクエリ出来るようになります。
みてみましょう。AGWFirewallLogs テーブルが対象です。
確認することが出来ました。
カスタムルールに反応して設定したアクション(ここではログ記録)されていることが確認出来ます。
そしてこのメッセージを見てみると、ルールの対象ヘッダーの値がログに含まれていたり、クライアント IP アドレスも確認が出来ますね。
機密データ保護のためのログスクラブを有効化
では続いて機密データのログスクラブ機能というやつを有効化していきます。
デフォルトでは無効状態で、WAF ポリシーの「機密データ」メニューからログスクラブを有効化出来ます。
有効化して、かつどういう条件のものをマスキング対象とするか設定することが出来ます。
次のような感じで対象を選択出来まして、IP アドレスについては演算子やセレクターの設定は不要ですぐに使うことが出来ます。
今回はこんな感じで設定してみました。
複数のルールを設定することが出来まして、IP アドレスと、あとはカスタムヘッダーを対象にしてみました。
有効化後に何度かリクエストを送信して、WAF のログを確認してみましょう。
おっ、クライアント IP アドレスや、指定したカスタムヘッダーの値が「*」でマスキングされていますね。
上記を見ていただくとわかるのですが、有効化前に出力されたログについては遡ってマスキングされるわけではないので注意しましょう。
WAF ログ以外は対象外
ちなみに、アクセスログのほうは対象外で、引き続き出力されていました。
さいごに
本日は Azure Application Gateway で WAF ログの機密データをマスク出来るようになっていたので試してみました。
すでに WAF プランをお使いの方は手軽に導入出来そうですね。
機械学習ベースで機密情報を検出するタイプではなく対象データを指定する形なので、特定のリクエストの決まった箇所を保護しやすく、非常に使いやすいと思いました。